package com.xinyue.ext;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Map;

import freemarker.template.Template;
import freemarker.template.TemplateException;

/**单例
 * 根据数据和模板创建具体的Code代码文件。
 */
public class FileBuilder {
	//文件根路径
	private String fileRoot;
	//模板编码
	public static final String encode = "UTF-8";
	//Java文件后缀名
	public static final String java = ".java";
	//JSP文件后缀名
	public static final String jsp = ".jsp";
	
	/**私有构造器*/
	private FileBuilder() {
	}
	private FileBuilder(String fileRoot) {
		this.fileRoot = fileRoot;
	}
	
	/**获得FileBuilder实例
	 */
	public static FileBuilder getInstance(String fileRoot) {
		return new FileBuilder(fileRoot);
	}
	
	/**
	 * 调用对应构建器，创建代码文件
	 * @param filePath 文件路径
	 * @param root 数据
	 * @throws IOException 
	 * @throws TemplateException 
	 */
	public void createFile(String filePath, Map<String, Object> root, Template temp) throws IOException, TemplateException {
		//创建输出流并设置编码
		Writer out = new OutputStreamWriter(new FileOutputStream(getFile(fileRoot + "/" + filePath)), encode);
		temp.process(root, out);
		out.flush();
		out.close();
	}
	
	/**根据路径获得文件对象
	 */
	private File getFile(String path) throws IOException {
		File file = new File(path + java);
		//如果文件不存在，则创建新文件。
		if(!file.exists()) {
			file.getParentFile().mkdirs();
			file.createNewFile();
		}
		
		return file;
	}
}
